@echo off
REM ======== MyJSONParser 构建脚本 (build.bat) ========

SETLOCAL EnableDelayedExpansion

REM 处理命令行参数 - 可选的构建配置
SET build_configs=Debug Release Dist
SET specific_config=

IF NOT "%~1"=="" (
    SET specific_config=%~1
    ECHO 将仅构建 %specific_config% 配置
)

ECHO ====== MyJSONParser 构建工具 ======
ECHO.

REM 检查premake5是否存在
WHERE premake5 >nul 2>nul
IF %ERRORLEVEL% NEQ 0 (
    ECHO 错误: 找不到premake5。请确保premake5在系统PATH中。
    ECHO 您可以从 https://premake.github.io/download.html 下载premake5。
    GOTO :ERROR
)

ECHO 步骤 1: 使用premake5生成Visual Studio项目文件
premake5 vs2022
IF %ERRORLEVEL% NEQ 0 (
    ECHO 错误: premake5生成项目文件失败。
    GOTO :ERROR
)

ECHO 步骤 2: 寻找Visual Studio MSBuild
ECHO 正在寻找Visual Studio安装...

REM 使用vswhere查找Visual Studio安装路径(如果存在)
SET "VSWHERE_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
IF EXIST "!VSWHERE_PATH!" (
    FOR /F "tokens=*" %%i IN ('"!VSWHERE_PATH!" -latest -products * -requires Microsoft.Component.MSBuild -property installationPath') DO (
        SET "VS_INSTALL_DIR=%%i"
    )
)

REM 检查常见的MSBuild路径
SET "MSBUILD_PATH="
IF DEFINED VS_INSTALL_DIR (
    SET "MSBUILD_PATH=!VS_INSTALL_DIR!\MSBuild\Current\Bin\amd64\MSBuild.exe"
    IF NOT EXIST "!MSBUILD_PATH!" SET "MSBUILD_PATH=!VS_INSTALL_DIR!\MSBuild\Current\Bin\MSBuild.exe"
    IF NOT EXIST "!MSBUILD_PATH!" SET "MSBUILD_PATH="
)

REM 如果上面的方法找不到MSBuild，则检查其他可能的位置
IF NOT DEFINED MSBUILD_PATH (
    FOR %%v IN (2022 2019 2017) DO (
        FOR %%e IN (Enterprise Professional Community BuildTools) DO (
            SET "CHECK_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\%%v\%%e\MSBuild\Current\Bin\MSBuild.exe"
            IF EXIST "!CHECK_PATH!" (
                SET "MSBUILD_PATH=!CHECK_PATH!"
                GOTO :FOUND_MSBUILD
            )
            SET "CHECK_PATH=%ProgramFiles%\Microsoft Visual Studio\%%v\%%e\MSBuild\Current\Bin\MSBuild.exe"
            IF EXIST "!CHECK_PATH!" (
                SET "MSBUILD_PATH=!CHECK_PATH!"
                GOTO :FOUND_MSBUILD
            )
        )
    )
)

REM 如果还是找不到，尝试使用旧版本的MSBuild路径
IF NOT DEFINED MSBUILD_PATH (
    SET "MSBUILD_PATH=%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"
    IF NOT EXIST "!MSBUILD_PATH!" SET "MSBUILD_PATH=%ProgramFiles%\MSBuild\14.0\Bin\MSBuild.exe"
)

:FOUND_MSBUILD
IF NOT DEFINED MSBUILD_PATH (
    ECHO 错误: 无法找到Visual Studio的MSBuild。
    ECHO 请确保已安装Visual Studio 2017/2019/2022或更高版本。
    GOTO :ERROR
)

ECHO 使用MSBuild从路径: !MSBUILD_PATH!

REM 确保安装了C++开发工具
IF NOT EXIST "!VS_INSTALL_DIR!\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Default.props" (
    IF NOT EXIST "!MSBUILD_PATH!\..\..\Microsoft.Cpp.Default.props" (
        ECHO 警告: 似乎没有安装C++开发工具。请在Visual Studio安装程序中添加"使用C++的桌面开发"工作负载。
        ECHO 按任意键继续...
        PAUSE > NUL
    )
)

REM 步骤3: 编译项目
IF "%specific_config%"=="" (
    REM 编译所有配置
    FOR %%c IN (%build_configs%) DO (
        CALL :BUILD_CONFIG %%c
        IF !ERRORLEVEL! NEQ 0 GOTO :ERROR
    )
) ELSE (
    REM 编译指定配置
    CALL :BUILD_CONFIG %specific_config%
    IF !ERRORLEVEL! NEQ 0 GOTO :ERROR
)

ECHO.
ECHO ====== 构建完成 ======
ECHO.
ECHO 所有配置已成功构建。您现在可以使用install.bat脚本安装项目。
ECHO.
GOTO :EOF

:BUILD_CONFIG
ECHO 正在编译 %1 配置...
"!MSBUILD_PATH!" MyJSONParser.sln /p:Configuration=%1 /p:Platform=x64 /m
IF %ERRORLEVEL% NEQ 0 (
    ECHO 错误: %1 配置编译失败。
    EXIT /B 1
)
ECHO %1 配置编译成功。
EXIT /B 0

:ERROR
ECHO.
ECHO 构建过程中出现错误！
PAUSE
EXIT /B 1
